package main

import (
	"fmt"
)

// 数组，
//存放元素的容器
//必须指定存放元素耳朵类型和容量(长度)
//数组的长度是数组的一部分
func main() {
	var a1 [3]bool // [true false true]
	var a2 [4]bool // [true true false false]

	// 长度不一样，无法比较

	fmt.Printf("a1:%T,a2:%T", a1, a2)
	// a1:[3]bool,a2:[4]bool

	//数组的初始化  如果不初始化，默认元素为零值(整形和浮点都为0，字符串："")

	//1.初始化
	a1 = [3]bool{true, true, false}
	fmt.Println(a1)
	//[true true false]
	//2. 初始化  ;根据初始值自动推断数组的长度是多少
	a100 :=  [...]int{01,2,2,3,4,54,6,7,8}
	fmt.Println(a100)
	// 3.初始化方式3；根据索引位置初始化
	a3 := [5]int{0:1,4:2}   //[1 0 0 0 2]
	fmt.Println(a3) //[1 2 0 0 0]

	//数组的遍历

	c1 := [3]string{"北京", "上海", "深圳"}
	//根据索引遍历
	for i := 0;i<len(c1);i++{
		fmt.Println(c1[i])
	}

	// 根据range遍历
	for _, k := range c1{
		fmt.Println(k)
	}

	// 多维数组
	// [[1, 2] [3, 4] [5, 6]]
	var a11 [3][2]int
	a11 = [3][2]int{
		[2]int{1, 2},
		[2]int{3, 4},
		[2]int{5, 6},
	}
	fmt.Println(a11)
	for _, v1 := range a11{
		fmt.Println(v1)
		for _, v2 := range v1{
			fmt.Println(v2)
		}
	}

	//数组是值类型  没有引用计数
	b1 := [3]int{1, 3, 4}
	b2 := b1
	b2[0] = 100
	fmt.Println(b1, b2)  //[1 3 4] [100 3 4]

	m := [...]int{1, 3, 5, 7, 8}
	c := 0
	for _, z := range m {
		c = z + c
	}
	fmt.Println(c)
	//
	for j := 0;j<len(m);j ++ {
		for k:=j+1;k<len(m); k ++{
			if m[j] + m[k] == 8{
				fmt.Printf("(%d, %d)", j, k)
			}
		}
	}

}